package week_3.experiment;

import week_1.practice.EmptyCollectionException;

import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;

//实现数组插入、删除、输出操作
/*从磁盘读取一个文件， 这个文件有两个数字。
	从文件中读入数字1，  插入到数组第 5 位，并打印所有数字，和元素的总数。 保留这个数组，继续下面的操作。
	从文件中读入数字2， 插入到数组第 0 位，并打印所有数字，和元素的总数。 保留这个数组，并继续下面的操作。
	从数组中删除刚才的数字1.  并打印所有数字和元素的总数*/
public class FourthExperiment {
    int nLixinyu;

      public FourthExperiment(){
           nLixinyu=7;

       }

    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一些整数，这些整数是你学号中依次取出的两位数以及+\n\t+今天的时间（例如：2018/10/1,16:23:49就是数字20,17,23,1，16,23,49）");
        String sentence = scan.nextLine();
        FourthExperiment q = new FourthExperiment();
        int[] number = new int[20];
        String[] numbers = sentence.split(",");
        for (int a = 0; a < numbers.length; a++)
        {
            number[a] = Integer.parseInt(numbers[a]);
        }
        //磁盘读取一个文件， 这个文件有两个数字
        File file = new File("sort.txt");
        Reader reader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(reader);
        StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
        int  num = stringTokenizer.countTokens();
        int[] counts = new int[num];
        int a=0;
        while(stringTokenizer.hasMoreTokens()){
            counts[a]=Integer.parseInt(stringTokenizer.nextToken());
            a++;
        }
        int firstnumber =counts[0];//从文件中读出的第一个数
        int secondnumber = counts[1];//从文件中读出的第二个数
        //从文件中读入数字1，  插入到数组第 5 位，并打印所有数字，和元素的总数.
        q.InsertElement2(number,4,firstnumber);
        System.out.println("第一个元素插入后的数组为：");
        q.Print(number,numbers.length);
        System.out.println();
        System.out.println("元素总数为"+"\t"+q.size());
        System.out.println();
        //从文件中读入数字2， 插入到数组第 0 位，并打印所有数字，和元素的总数。
        q.InsertElement2(number,0,secondnumber);
        System.out.println("第二个元素插入后的数组为：");
        q.Print(number,numbers.length);
        System.out.println();
        System.out.println("元素总数为"+"\t"+q.size());
        System.out.println();
        //从数组中删除刚才的数字1.  并打印所有数字和元素的总数
        q.DeleteElement(number,4);
        System.out.println("删掉刚刚插入的第一个元素后的数组为：");
        q.Print(number,numbers.length);
        System.out.println();
        System.out.println("元素总数为"+"\t"+q.size());
    }



    //数组的插入操作方法。(第一种方法插入)
    public  int[] InsertElement1(int array[], int index,int element)
    {
        int length = array.length;//确定数组长度
        int destination[] = new int[length + 1];//创建新的数组
        System.arraycopy(array, 0, destination, 0, index);
        destination[index] = element;
        System.arraycopy(array, index, destination, index + 1, length - index);
        return destination;
    }
    //数组的插入元素方法（第二种方法插入）
    public  void InsertElement2(int array[],int index,int element)
    {
        if(array.length==0)
        {
            array[0]=element;
        }
        else
        {
            for(int a = nLixinyu;a>index;a--)
            {
               array[a]=array[a-1];
            }

            array[index]=element;
        }
        nLixinyu++;
    }
    //数组的删除元素操作
    public  void DeleteElement(int array[],int index)
    {
            for (int i= 0;i<nLixinyu-1; i++) {
                array[i]=array[i+1];
            }

       nLixinyu--;
    }
    //数组的打印元素操作
    public  void  Print(int[] array,int n){
        for(int k=0;k<nLixinyu;k++){
            System.out.print(array[k]+" ");
        }

//        for(int num:array){
//          System.out.print(num+" ");
//      }
    }

    public int size(){
        return nLixinyu;
    }
}
